package com.airlines.crewassignment.service.linkline;

import java.util.Date;
import java.util.List;

import com.airlines.crewassignment.domain.FlightInfo;

/**
 * @author xxxx
 * @date 2018年3月26日 
 * @description
 */
public interface FlightInfoService {
	/**
	 * 根据一堆航班，得到连线航班，类似于 9787/9788
	 * @param list,必须是已经排序的，按照std排序
	 * @return
	 */
	String getFlightCom(List<FlightInfo> list);
	
	/**
	 * 计算某个航段的飞行时间
	 * @param f
	 * @return
	 */
	int getFlightDuration(FlightInfo f);
	
	/**
	 * 计算某些航班的飞行时间总和
	 * @param list
	 * @return
	 */
	int getFlightDuration(List<FlightInfo> list);
	
	/**
	 * 更新航班的连线号
	 * 如果crewLinkLineNo<=0,则更新连线号为null
	 * @param dutyCode
	 * @param flightId
	 * @return
	 */
	int updateCrewLinkLineNo(String dutyCode,Integer flightId,Integer crewLinkLineNo);

	/**
	 * 更新航班的任务环号
	 * @param dutyCode
	 * @param flightId
	 * @param taskLoopFact 如果为null， 并且原先没有taskLoopFact 则自动获取flightId对应的连线上的其他航班的任务环
	 * @return
	 */
	int updateTaskLoopFact(String dutyCode, int flightId, String taskLoopFact);
	
	/**
	 * 判断一个航班是否是夜航航班
	 * 逻辑：落地时间在0-5点之间的
	 * @param flightInfo
	 * @return
	 */
	boolean isNightFly(FlightInfo  flightInfo);
	
	/**
	 * 是否是差航线
	 
	 * @param flightInfo
	 * @return
	 */
	boolean isBadRouteFlight(FlightInfo  flightInfo,String dutyCode);
	/**
	 * 根据航班id查询航班信息
	 * @param flightIds
	 * @return
	 */
	List<FlightInfo>  getFlightInfoList (List<String>  flightIds);

	/**
	 * 从所有航班信息中获取某人的航班
	 * @param flightInfoList
	 * @param workcode
	 * @return
	 */
	List<FlightInfo> getFlightInfoByWorkcode(List<FlightInfo> flightInfoList,String workcode);
	
	/**
	 * 根据模块+航班，获取连线号
	 * @param flightInfo
	 * @param dutyCode
	 * @return
	 */
	int getCrewLinkLineNo(FlightInfo  flightInfo,String dutyCode);
	
	/**
	 * 根据模块+航班，获取任务环实例号
	 * @param flightInfo
	 * @param dutyCode
	 * @return
	 */
	String getTaskLoopFact(FlightInfo  flightInfo,String dutyCode);

	/**
	 * 根据(...可空...)获取最后飞行日期
	 * @return
	 */
	Date getLastFlightDate(FlightInfo flightInfo);
}
